package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建redis模版对象...");
        RedisTemplate redisTemplate = new RedisTemplate(); //示例化RedisTemplate对象

        redisTemplate.setConnectionFactory(redisConnectionFactory); //设置连接工厂  这是最关键的一步。它将注入的连接工厂设置给 RedisTemplate 实例。
        // 没有这一步，RedisTemplate 就不知道如何连接到Redis服务器。

        redisTemplate.setKeySerializer(new StringRedisSerializer());  //为Hash数据结构的Key设置序列化器

//        这一行是配置序列化器。它专门为Redis中Hash类型数据的Key设置序列化方式。
//        序列化（Serialization）：因为Redis只能存储字节序列（byte arrays），而我们在Java中操作的是对象（String, Integer, 自定义对象等）。
//        所以当我们要把一个Java对象存到Redis时，必须将它转换成字节数组，这个过程叫序列化。反过来，从Redis读取字节数组再转换成Java对象，叫反序列化。
//        StringRedisSerializer: 这是一种序列化器，专门用于在Java的 String 和Redis的字节数组之间进行转换。它使用UTF-8编码。

        return redisTemplate;  //返回配置好的Bean
    }

}
